home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / make-367.lha / make-3.67 / file.h < prev    next >
C/C++ Source or Header  |  1993-01-25  |  4KB  |  96 lines

  1. /* Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993
  2.     Free Software Foundation, Inc.
  3. This file is part of GNU Make.
  4.  
  5. GNU Make is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2, or (at your option)
  8. any later version.
  9.  
  10. GNU Make is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with GNU Make; see the file COPYING.  If not, write to
  17. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  18.  
  19. /* Structure that represents the info on one file
  20.    that the makefile says how to make.
  21.    All of these are chained together through `next'.  */
  22.  
  23. struct file
  24.   {
  25.     struct file *next;
  26.     char *name;
  27.     struct dep *deps;
  28.     struct commands *cmds;    /* Commands to execute for this target */
  29.     char *stem;            /* Implicit stem, if an implicit
  30.                        rule has been used */
  31.     struct dep *also_make;    /* Targets that are made by making this.  */
  32.     time_t last_mtime;        /* File's modtime, if already known.  */
  33.     struct file *prev;        /* Previous entry for same file name;
  34.                    used when there are multiple double-colon
  35.                    entries for the same file.  */
  36.  
  37.     /* File that this file was renamed to.  After any time that a
  38.        file could be renamed, call `check_renamed' (below).  */
  39.     struct file *renamed;
  40.  
  41.     /* List of variable sets used for this file.  */
  42.     struct variable_set_list *variables;
  43.  
  44.     /* Immediate dependent that caused this target to be remade,
  45.        or nil if there isn't one.  */
  46.     struct file *parent;
  47.  
  48.     short int update_status;    /* Status of the last attempt to update,
  49.                    or -1 if none has been made.  */
  50.  
  51.     enum            /* State of the commands.  */
  52.       {        /* Note: It is important that cs_not_started be zero.  */
  53.     cs_not_started,        /* Not yet started.  */
  54.     cs_deps_running,    /* Dep commands running.  */
  55.     cs_running,        /* Commands running.  */
  56.     cs_finished        /* Commands finished.  */
  57.       } command_state ENUM_BITFIELD (2);
  58.  
  59.     unsigned int double_colon:1;/* Nonzero for double-colon entry */
  60.     unsigned int precious:1;    /* Non-0 means don't delete file on quit */
  61.     unsigned int tried_implicit:1; /* Nonzero if have searched
  62.                       for implicit rule for making
  63.                       this file; don't search again.  */
  64.     unsigned int updating:1;    /* Nonzero while updating deps of this file */
  65.     unsigned int updated:1;    /* Nonzero if this file has been remade.  */
  66.     unsigned int is_target:1;    /* Nonzero if file is described as target.  */
  67.     unsigned int cmd_target:1;    /* Nonzero if file was given on cmd line.  */
  68.     unsigned int phony:1;    /* Nonzero if this is a phony file
  69.                    i.e., a dependency of .PHONY.  */
  70.     unsigned int intermediate:1;/* Nonzero if this is an intermediate file.  */
  71.     unsigned int dontcare:1;    /* Nonzero if no complaint is to be made if
  72.                    this target cannot be remade.  */
  73.   };
  74.  
  75. /* Number of intermediate files entered.  */
  76.  
  77. extern unsigned int num_intermediates;
  78.  
  79. extern struct file *default_goal_file, *suffix_file, *default_file;
  80.  
  81.  
  82. extern struct file *lookup_file (), *enter_file ();
  83. extern void remove_intermediates (), snap_deps ();
  84. extern void rename_file (), file_hash_enter ();
  85.  
  86.  
  87. extern time_t f_mtime ();
  88. #define file_mtime_1(f, v) \
  89.   ((f)->last_mtime != (time_t) 0 ? (f)->last_mtime : f_mtime ((f), v))
  90. #define file_mtime(f) file_mtime_1 ((f), 1)
  91. #define file_mtime_no_search(f) file_mtime_1 ((f), 0)
  92.  
  93.  
  94. #define check_renamed(file) \
  95.   while ((file)->renamed != 0) (file) = (file)->renamed /* No ; here.  */
  96.